package com.qf.aop;

/**
 * @author 孙亚梅
 * @version V1.0
 * @Project javase2203
 * @Package com.qf.aop
 * @Description:
 * @Date 2022/6/7 10:27
 */

import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;

/**
 * 演示aop注解开发
 */
//声明这个类是一个切面类，里面会包含切入点（pointcut）和通知（advice）
    @Aspect
 //注册成spring的JavaBean
 @Component
public class MyAspect {

      //  配置切入点
    @Pointcut("execution(* com.qf.service.UserServiceImpl.*(..))")
    public  void  pc(){}

    /**
     * 前置通知：
     *          先执行前置通知的额外功能
     *          再执行核心业务方法
     */

    @Before("pc()")
    public  void  myBefore(){
        System.out.println("======执行了before前置通知 ========相当于执行方法前开启事务===========");
    }

    /**
     * 后置通知：
     *          先执行核心业务方法
     *          再执行后置通知的额外功能
     */
    @After("pc()")
    public void  myAfter(){
        System.out.println("==执行了after后置通知======相当于执行方法后提交事务============");
    }
}
